/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sessions;

//import java.beans.Statement;
import java.sql.Connection;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;



import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
import javax.ejb.Stateless;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import persistencia.Mensaje;
import persistencia.Usuario;
import javax.sql.DataSource;

/**
 *
 * @author MALLO-M
 */
@Stateless
public class PersistenciaBean implements PersistenciaBeanRemote, PersistenciaBeanLocal {

    private Statement orden;
    private String driver = "org.apache.derby.jdbc.ClientDriver";
    //String connectString = "jdbc:postgresql://localhost:5432/UPSAM";
    String connectString = "jdbc:derby://localhost:1527/UPSAM";
    String user = "admin";
    String password = "admin";
    static PersistenciaBean instance = null;
    Connection con;
    DataSource ds;
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    public PersistenciaBean() throws NamingException, SQLException {
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(connectString, user, password);
            InitialContext ic = new InitialContext();
            System.out.println("Antes de la conexion pool");
            ds = (DataSource) ic.lookup("java:comp/env/jdbc/myDatasource");
            System.out.println("Despues de la conexion pool");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public boolean enviarMensaje(Mensaje mensaje) {
        System.out.println("PersistenciaBean --> responderMensaje");
        ArrayList contenedorMensajes = null;
        PreparedStatement stmt = null;
        int id = 0;
        try {
            System.out.println("PersistenciaBean --> responderMensaje2");
            java.util.Date today =
                    new java.util.Date();
            java.sql.Date sqlToday =
                    new java.sql.Date(today.getTime());
            System.out.println(mensaje.toString());
            // + "-" +c.get(Calendar.MONTH) + "-" + c.get(Calendar.DATE);
            System.out.println("fecha actual --> " + sqlToday);
            System.out.println("PersistenciaBean --> responderMensaje4");
            String sql = "INSERT INTO ADMIN.MENSAJE (NOMBRE,CONTENIDO,FECHA,IDORIGEN,IDDESTINO,NOMBREORIGEN,NOMBREDESTINO) VALUES (?,?,?,?,?,?,?)";
            stmt = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
            //stmt = con.prepareStatement("INSERT INTO ADMIN.MENSAJE (NOMBRE,CONTENIDO,FECHA,IDORIGEN,IDDESTINO,NOMBREORIGEN,NOMBREDESTINO) VALUES (?,?,?,?,?,?,?)");

            //String sql = "INSERT INTO ADMIN.MENSAJE (NOMBRE,CONTENIDO,FECHA,IDORIGEN,IDDESTINO,NOMBREORIGEN,NOMBREDESTINO) VALUES ('" + mensaje.getNombre() + "','" +mensaje.getContenido() + "','" + sqlToday + "'," + String.valueOf(mensaje.getIdOrigen()) + "," + String.valueOf(mensaje.getIdDestino()) + ",'" + mensaje.getNombreOrigen() "','" + mensaje.getNombreDestino() + "')";
            System.out.println("PersistenciaBean --> responderMensaje5");
            stmt.setString(1, mensaje.getNombre());
            stmt.setString(2, mensaje.getContenido());
            stmt.setDate(3, sqlToday);
            stmt.setInt(4, mensaje.getIdOrigen());
            stmt.setInt(5, mensaje.getIdDestino());
            System.err.println("PersistenciaBean --> responderMensaje51 --> " + mensaje.getNombreOrigen());
            stmt.setString(6, mensaje.getNombreOrigen());
             System.err.println("PersistenciaBean --> responderMensaje51 --> " + mensaje.getNombreDestino());
            stmt.setString(7, mensaje.getNombreDestino());
            //String sql = "INSERT INTO ADMIN.MENSAJE (NOMBRE,CONTENIDO,FECHA,IDORIGEN,IDDESTINO,NOMBREORIGEN,NOMBREDESTINO) VALUES ('" + mensaje.getNombre() + "','" +mensaje.getContenido() + "'," + sqlToday + "," + mensaje.getIdOrigen() + "," + mensaje.getIdDestino() + ",'" + mensaje.getNombreOrigen() + "','" + mensaje.getNombreDestino() + "')";
            int cont = stmt.executeUpdate();
            //int cont = stmt.executeUpdate();
            System.out.println("PersistenciaBean --> responderMensaje5 -> antes de rs");
            ResultSet rs = null;

            rs = stmt.getGeneratedKeys();
            System.out.println("PersistenciaBean --> responderMensaje5 -> despues de rs --> " + cont );
            if (cont == 1){
            //if (rs.next()) {
                System.out.println("tiene");
                rs.next();
                int newId = rs.getInt(1);
                mensaje.setId(newId);
            }
            System.out.println("PersistenciaBean --> responderMensaje6");
            stmt = con.prepareStatement("INSERT INTO ADMIN.USUARIO_MENSAJE (USUARIO_ID,MENSAJE_ID) VALUES(?,?)");
            stmt.setInt(1, mensaje.getIdOrigen());
            stmt.setInt(2, mensaje.getId());
            stmt.executeUpdate();
            stmt = con.prepareStatement("INSERT INTO ADMIN.USUARIO_MENSAJE (USUARIO_ID,MENSAJE_ID) VALUES(?,?)");
            stmt.setInt(1, mensaje.getIdDestino());
            stmt.setInt(2, mensaje.getId());
            stmt.executeUpdate();
            stmt.close();
            rs.close();
            con.close();

            System.out.println("PersistenciaBean --> responderMensaje --> final");
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            try {
                stmt.close();
                con.close();
                //return true;
                return true;
            } catch (Exception ex) {
                System.err.println("Error en el cierre de la base de datos");
                ex.getStackTrace();
                return false;
                //return false;
            }
        }

    }

    public ArrayList getMensajes(Usuario usuario) throws NamingException, SQLException {
        //InitialContext ic = new InitialContext();
        //DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/myDatasource");
        System.out.println("Despues de la conexion pool");
        //d con = ds.getConnection();
        //DatoInfo dato = new DatoInfo();
        //con = null;
        ResultSet rs = null;
        PreparedStatement pStatement = null;
        ArrayList contenedorMensajes = null;
        try {
            con = ds.getConnection();
            System.out.println("id usuario --> " + usuario.getId());
            String sql = "SELECT * FROM ADMIN.USUARIO_MENSAJE WHERE USUARIO_ID = " + usuario.getId();
            pStatement = con.prepareStatement(sql);
            //pStatement.setString(1, usuario.getEmail());
            rs = pStatement.executeQuery();
            System.err.println("Estamos en EJB.verMensajes");
            //System.err.println(rs.next());

            contenedorMensajes = new ArrayList();
            boolean vacio = true;
            while (rs.next()) {
                ResultSet rs2 = null;
                PreparedStatement pStatement2 = null;
                Mensaje mensaje = new Mensaje();
                //mensaje.setId(rs.getInt("ID"));
                mensaje.setIdOrigen(usuario.getId());
                mensaje.setId(rs.getInt("MENSAJE_ID"));
                //fichero.setNombre(rs.getString("NOMBRE"));
                //fichero.setFichero("")
                System.out.println("Tiene mensajes --> " + mensaje.getId());

                vacio = false;
                sql = "SELECT * FROM ADMIN.MENSAJE WHERE ID = " + mensaje.getId();
                pStatement2 = con.prepareStatement(sql);
                //pStatement.setString(1, usuario.getEmail());
                System.out.println("persistenciabean --> antes de recoger id de tabla fichero");
                rs2 = pStatement2.executeQuery();
                System.out.println("persistenciabean --> despues de recoger id de tabla fichero");
                while (rs2.next()) {
                    System.out.println("persistenciabean --> en el bucle rs2");
                    //mensaje.setNombre(rs2.getString("NOMBRE"));
                    mensaje.setId(rs2.getInt("ID"));
                    mensaje.setIdDestino(rs2.getInt("IDDESTINO"));
                    mensaje.setIdOrigen(rs2.getInt("IDORIGEN"));
                    mensaje.setNombre(rs2.getString("NOMBRE"));
                    mensaje.setContenido(rs2.getString("CONTENIDO"));
                    mensaje.setFecha(rs2.getDate("FECHA"));
                    mensaje.setNombreOrigen(rs2.getString("NOMBREORIGEN"));
                    mensaje.setNombreDestino(rs2.getString("NOMBREDESTINO"));
                    System.out.println("antes de meter en contenedor");
                    contenedorMensajes.add(mensaje);
                    System.out.println("Despues de meter en contenedor");
                }
                rs2.close();
                pStatement2.close();
            }

            //usuario.setContenedorMensajes(contenedorMensajes);
            if (vacio) {
                System.err.println("No tiene ficheros asociados.");
            }
        } catch (Exception e) {
            System.out.println("Error --> " + e.getLocalizedMessage());

        }
        try {
            rs.close();
            pStatement.close();
            con.close();
            //return true;
            return contenedorMensajes;
        } catch (Exception ex) {
            System.out.println("Error en el cierre de la base de datos");
            return null;
            //return false;
        }
    }


    /*ArrayList getUsuarios() {
        ResultSet rs = null;
        PreparedStatement pStatement = null;
        ArrayList contenedorMensajes = null;
        try {
            con = ds.getConnection();

            String sql = "SELECT * FROM ADMIN.USUARIO";
            pStatement = con.prepareStatement(sql);
            //pStatement.setString(1, usuario.getEmail());
            rs = pStatement.executeQuery();
            System.err.println("Estamos en EJB.verMensajes");
            //System.err.println(rs.next());

            contenedorMensajes = new ArrayList();
            boolean vacio = true;
            ArrayList listaUsuarios = new ArrayList();
            Usuario usuario = new Usuario();
            while (rs.next()) {
                usuario.setId(rs.getInt("ID"));
                usuario.setNombre(rs.getString("NOMBRE"));
                usuario.setApellidos(rs.get);
                listaUsuarios.add(rs);
            }
        }catch(Exception e){
            System.err.println("Error en persistenciaBean --> getUsuarios");
            e.getStackTrace();
        }
    }*/
}
